/*********************************************************************************
  *FileName:  nsuc16xx_linuart.h
  *Version:   V1.0
  *Date:      2023-09-22
**********************************************************************************/

#ifndef  __nsuc16xx_linuart_H__
#define  __nsuc16xx_linuart_H__

/***************************************Includes***********************************/
#include "nsuc16x0.h"


/***************************************Macros***********************************/
#define LINUART_StopBits_1                      ((uint8_t)0x00)
#define LINUART_StopBits_2                      ((uint8_t)0x01)

#define LINUART_Parity_No                       ((uint8_t)0x00)
#define LINUART_Parity_Even                     ((uint8_t)0x01)
#define LINUART_Parity_Odd                      ((uint8_t)0x02)

#define LINUART_FifoBits_1                      ((uint8_t)0x00)
#define LINUART_FifoBits_2                      ((uint8_t)0x01)
#define LINUART_FifoBits_4                      ((uint8_t)0x02)
#define LINUART_FifoBits_6                      ((uint8_t)0x03)
#define LINUART_FifoBits_7                      ((uint8_t)0x04)

#define LINUART_Mode_Normal                     ((uint8_t)0x00)
#define LINUART_Mode_LIN                        ((uint8_t)0x01)


#define LINUART_IT_TXC                          ((uint32_t)0x00000001)
#define LINUART_IT_RXC                          ((uint32_t)0x00000002)
#define LINUART_IT_TXBUSY												((uint32_t)0x00000004)
#define LINUART_IT_RXOV                         ((uint32_t)0x00000008)
#define LINUART_IT_PE														((uint32_t)0x00000010)
#define LINUART_IT_BRROK												((uint32_t)0x00000020)
#define LINUART_IT_TXEND												((uint32_t)0x00000040)
#define LINUART_IT_FE														((uint32_t)0x00000080)
#define LINUART_IT_TIMEOUT											((uint32_t)0x00000100)
#define LINUART_IT_TXFOV                        ((uint32_t)0x00000200)
#define LINUART_IT_TXFF													((uint32_t)0x00000400)
#define LINUART_IT_RXFF													((uint32_t)0x00000800)
#define LINUART_IT_TXFE													((uint32_t)0x00001000)
#define LINUART_IT_RXFE												  ((uint32_t)0x00002000)
#define LINUART_IT_BRK													((uint32_t)0x00004000)
#define LINUART_IT_TXFLC                        ((uint32_t)0x00008000)
#define LINUART_IT_RXFLC                        ((uint32_t)0x00010000)
#define LINUART_IT_TXFC                         ((uint32_t)0x00020000)
#define LINUART_IT_TXERR                        ((uint32_t)0x00040000)

#define LINUART_ISR_TXC                         ((uint32_t)0x00000001)
#define LINUART_ISR_RXC                         ((uint32_t)0x00000002)
#define LINUART_ISR_TXBUSY                      ((uint32_t)0x00000004)
#define LINUART_ISR_RXOV                        ((uint32_t)0x00000008)
#define LINUART_ISR_PE                          ((uint32_t)0x00000010)
#define LINUART_ISR_BRROK												((uint32_t)0x00000020)
#define LINUART_ISR_TXEND												((uint32_t)0x00000040)
#define LINUART_ISR_FE                          ((uint32_t)0x00000080)
#define LINUART_ISR_TIMEOUT											((uint32_t)0x00000100)
#define LINUART_ISR_TXFOV                       ((uint32_t)0x00000200)
#define LINUART_ISR_TXFF                        ((uint32_t)0x00000400)
#define LINUART_ISR_RXFF                        ((uint32_t)0x00000800)
#define LINUART_ISR_TXFE                        ((uint32_t)0x00001000)
#define LINUART_ISR_RXFE                        ((uint32_t)0x00002000)
#define LINUART_ISR_BRK													((uint32_t)0x00004000)
#define LINUART_ISR_TXFLC                       ((uint32_t)0x00008000)
#define LINUART_ISR_RXFLC                       ((uint32_t)0x00010000)
#define LINUART_ISR_TXFC                        ((uint32_t)0x00020000)
#define LINUART_ISR_TXERR                       ((uint32_t)0x00040000)
#define LINUART_ISR_BRRERRF                     ((uint32_t)0x20000000)

/***************************************Variables***********************************/
typedef struct
{
  FunctionalState LINUART_TXRX; 
  FunctionalState LINUART_TXFifo; 
  FunctionalState LINUART_RXFifo; 
  uint8_t LINUART_StopBits; 
  uint8_t LINUART_Parity; 
  FunctionalState LINUART_AutoBaudRate;
  uint32_t LINUART_BaudRate;
  uint8_t LINUART_Mode;
  uint8_t LINUART_TXFifoBits;    
  uint8_t LINUART_RXFifoBits;                     
} LINUART_InitTypeDef;


/***************************************Functions***********************************/
void LINUART_Init(LINUART_TypeDef* LINUARTx, LINUART_InitTypeDef* LINUART_InitStruct);
void LINUART_Cmd(LINUART_TypeDef* LINUARTx, FunctionalState NewState);
void LINUART_RXCmd(LINUART_TypeDef* LINUARTx, FunctionalState NewState);
void LINUART_ITConfig(LINUART_TypeDef* LINUARTx, uint32_t LINUART_IT, FunctionalState NewState);
ITStatus LINUART_GetITStatus(LINUART_TypeDef *LINUARTx, uint32_t LINUART_IT);
void LINUART_ClearITPendingBit(LINUART_TypeDef* LINUARTx, uint32_t LINUART_IT);
uint16_t LINUART_ReceiveData(LINUART_TypeDef* LINUARTx);
void LINUART_SendData(LINUART_TypeDef* LINUARTx, uint16_t Data);
void LINUART_TXFIFO_Fill(LINUART_TypeDef* LINUARTx, uint8_t *data, uint8_t len);
void LINUART_SetRXFIFO(LINUART_TypeDef *LINUARTx, uint8_t len);

#endif
/* [] END OF nsuc16xx_linuart.h */
